package model
import scala.collection.mutable.Map

trait OperadorDeRegistros extends ManejoDeMontos{
	  		
	def ventasPorProvincia():Map[Provincia,Float]={
		val map:Map [Provincia,Float]= Map() 
		provincias.foreach(prov => map(prov)=calcularVentasParaProvincia(prov))
		map
	}

	def calcularVentasParaProvincia(prov:Provincia)={
		registros.filter(r => r.empresa.provincia.equals(prov)).foldRight(0f)({(r,rs) => r.ventas + rs})
	}
	
	def nombreDeLasEmpresasQueSuperenVentas(monto: Float)=
	  this.registrosConocidos.filter(r=>r.ventas>monto).collect{case r=>r.empresa.nombre}.toSet
	
	def fuentesRecabadorasDeInformacion()=this.registros.collect{case r=>r.empresa.fuenteRecabadoraDeInformacion}.toSet
	
	def empresaConMayorGanancia(anho: Integer)={
		var conocidosDelAnho:List[RegistroConocido]=registrosConocidos.sortBy(_.ganancias)	
		conocidosDelAnho.head.empresa.nombre
	}
	
	def registrosDelAnho(anho: Integer) :List[Registro]= this.registros.filter(_.anho.equals(anho))
	
	def registrosConocidos:List[RegistroConocido]= this.registros.collect{case r :RegistroConocido => r}
			
	def registros():List[Registro]
	
	def provincias():List[Provincia]
	
}